#include<stdio.h>

//探究scanf函数，getchar，fgets不同




/*
																			scanf函数
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	函数概要：

			scanf 函数从标准输入流中读取格式化字符串。
			与 printf 格式化输出函数相反，scanf 函数是格式化输入函数。

			scanf()是C语言中的一个输入函数。
			与printf函数一样，都被声明在头文件stdio.h里，
			因此在使用scanf函数时要加上#include <stdio.h>。
			它是格式输入函数，即按用户指定的格式从键盘上把数据输入到指定的变量之中。


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

	函数原型：
		#include <stdio.h>  --->说明scanf这个函数是来自于stdio.h头文件中
		...
		int scanf(const char *format, ...); ---> scanf(格式控制, 地址列表)

	参数解析：

		参数：
		format：格式控制字符串，指定输入数据的类型和格式（类似 printf 的占位符）。

		...：可变参数列表，表示接收输入数据的变量地址（需用 & 取地址符，字符串数组除外）。该参数的个数由格式化字符串决定。每个参数均为一个存储空间，并与面格式化字符串中占位符的类型和位置一一对应。如果是一个普通的变量名，应在其名字前边加上 & 符号。

		该格式化字符串指定如何处理读取到的数据：

		空白字符：该函数将读取并忽略空白字符（空白字符包含空格、回车和制表符）；
		除了格式占位符（% 开头）外的非空白字符：指定函数必须从输入流中读取到的字符，如果读取不匹配，则函数调用失败，并从匹配失败处截断输入流；
		格式化占位符（% 开头）：用于指明获取的数据类型及位置。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

		“地址列表”参数用于给出接收数据变量的地址；
		格式控制是用双引号括起来的字符串，可以容纳多个格式字符，下表列出了 scanf() 函数中常用的格式字符。<太多了列不完了，这里只列出最多常用的，详细的话就是去查查小甲鱼C语言教材中scanf函数>

		转换字符：					含义：
		  %c	 					读取一个字符
		  %d						读取一个十进制整数，前边可以加上符号（+ 或 -）表示正负
		  %f						读取一个单、双精度浮点数（需要使用 lf），前边可以加上符号（+ 或 -）表示正负
		  %u						读取一个无符号的十进制整数
		  %s						读取一连串字符，直到遇到空白字符结束

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

		返回值：
			观察函数你就可以发现scanf函数具有返回值，如果成功，该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误，则返回 EOF。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

		局限性

	1.格式依赖：scanf需要预先知道输入数据的格式，这可能导致在处理未知或格式不规则的输入时出现问题。

	2.无法处理空白字符：当使用scanf读取字符串时，它会自动忽略在字符串前面的空白字符（包括空格、制表符和换行符）。如果需要读取包含空白字符的字符串，scanf可能不适合。

	3.输入缓冲区问题：scanf不会清除输入缓冲区中的内容，这可能导致在连续调用scanf时，之前未处理的换行符或其他字符被误读。

	4.错误处理：scanf在遇到格式不匹配的输入时，可能会留下不匹配的字符在输入缓冲区中，并且返回值可以用来判断是否成功读取，但处理错误输入的情况相对复杂。

	5.安全性问题：使用scanf读取字符串时，如果没有正确地指定字符串的最大长度，可能会导致缓冲区溢出，这是一个严重的安全问题。为了克服这些局限性，有时会使用更灵活的输入函数如fgets来读取字符串，或者使用getchar逐个字符地读取输入。



*/

//程序1
//scanf函数存储字符串
#include<stdio.h>
#include<stdlib.h>
void test1()
{
	//这里你输入"HACKED"， "I AM"这个试试，就会发现有很多不同，思考一下吧
	char ans[10];
	printf("请输入一个字符串：");
	scanf("%s", ans);

	printf("你输入的字符串是：%s", ans);

}





int main()
{
	test1();
	return 0;
}